/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package miselania.tiposgenericos;

import com.sun.media.sound.AuFileReader;
import java.util.ArrayList;
import java.util.Iterator;

/**
 *
 * @author cristhy
 */

//para declarar tipos genericos se usan los simbolos <> dentro de este una simbologia para poder
//representar al conjunto de objetos de un tipo aun no deifinido

public class miLinkedList<E>  {
    
    // atributos
    protected E datos;
    protected Nodo<E>  primero;
    int contador=0;

    public miLinkedList() {
        this.datos=null;
        this.primero=null;
    }
    public miLinkedList(E dato, Nodo<E>  siguiente) {
        this.datos=dato;
        this.primero=siguiente;
    }

    public void agregar(E y){
        Nodo<E> nuevito= new Nodo<E>(y);
        nuevito.sgt=primero;
        primero=nuevito;
        contador++;
          
    }
 
    public void insertarFianl(E y){
       Nodo<E> n1 = new Nodo<E>(y);
       this.contador++;
       Nodo<E> auxiliar= primero;
       if(auxiliar==null)
           primero=n1;
       else
       {
           while (auxiliar.sgt != null){
               auxiliar=auxiliar.sgt;
           }               
            // tenemos como auxiliar de referencia al ultimo nodod de la lista
               auxiliar.sgt=n1;
       }
       
    }
    
    public boolean borrar(E y){
        Nodo<E> auxiliar= primero,anterior=null;
        boolean resp= false;
        while (auxiliar != null && !auxiliar.datos1.equals(y)) {            
            anterior=auxiliar;
            auxiliar=auxiliar.sgt;
        }
        if(auxiliar !=null)
        {
            resp=true;
            this.contador--;
            if(anterior==null)
                //si se va a borrar el primer elemento de la lista
                primero=auxiliar.sgt;
            else
                //si se borrara un elemento intermedio
                anterior.sgt=auxiliar.sgt;
        }
        return resp;
    }
    @Override
    public String toString(){
        String respuest="";
        for (Nodo<E> a = primero;a!= null ;a=a.sgt)
            respuest+= a.datos1.toString()+"\n";
        return respuest;
    }

    
    
}
